/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package savet.util;

import java.awt.Component;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.LinkedList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFileChooser;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import savet.entidades.TipoGenero;
import savet.entidades.Trabalhador;
import savet.entidades.atributos.AtributoData;

/**
 *
 * @author rafael
 */
public class Trabalhadores {

    private Trabalhadores() {
    }

    public static Date stringParseDate(String dateFormat) {
        SimpleDateFormat format = new SimpleDateFormat("dd-MMM-yyyy");
        try {
            return format.parse(dateFormat);
        } catch (ParseException ex) {
            Logger.getLogger(Trabalhadores.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }

    public static TipoGenero stringParseTipoGenero(String tipoGeneroFormat) {
        if (tipoGeneroFormat.equalsIgnoreCase("M")) {
            return TipoGenero.M;
        } else if (tipoGeneroFormat.equalsIgnoreCase("F")) {
            return TipoGenero.F;
        }
        return null;
    }

    public static Boolean stringParseAprendiz(String aprendizFormat) {
        if (aprendizFormat.equalsIgnoreCase("0.0")) {
            return false;
        } else if (aprendizFormat.equalsIgnoreCase("1.0")) {
            return true;
        }
        return null;
    }

    public static List<Trabalhador> getTrabalhadoresSimples(File arquivo) throws IOException {
        return getTrabalhadoresSimples(new FileInputStream(arquivo));
    }

    public static List<Trabalhador> getTrabalhadoresSimples(InputStream inputStream) throws IOException {
        ImportXLSXUtil xLSXUtil = new ImportXLSXUtil(inputStream);
        Workbook wb = xLSXUtil.getWorkBook();

        Sheet sheet = wb.getSheet("Vinculos");
        List<Trabalhador> list = new LinkedList<Trabalhador>();

        for (Row row : sheet) {
            if (row.getRowNum() != 0) {
                Trabalhador trabalhador = new Trabalhador();
                for (Cell cell : row) {
                    switch (cell.getColumnIndex()) {
                        case 0:
                            trabalhador.setNome(cell.toString());
                            break;
                        case 1:
                            trabalhador.setPis(cell.toString());
                            break;
                        case 2:
                            trabalhador.setAdmissao(stringParseDate(cell.toString()));
                            break;
                        case 3:
                            trabalhador.setAfastamento(stringParseDate(cell.toString()));
                            break;
                        case 4:
                            trabalhador.setCodAfastamento(cell.toString());
                            break;
                        case 7:
                            trabalhador.setAprendiz(stringParseAprendiz(cell.toString()));
                            break;
                        case 8:
                            trabalhador.setGenero(cell.toString());
                            break;
                    }
                }
                list.add(trabalhador);
            }
        }
        return list;
    }

    public static File getArquivoDeFileChooser(Component parent) {

        JFileChooser jfc = new JFileChooser();
        jfc.setFileSelectionMode(JFileChooser.FILES_ONLY);
        jfc.showOpenDialog(parent);
        File arquivo = jfc.getSelectedFile();

        return arquivo;
    }

    public static void main(String[] args) {

//        File file2 = new File("C:\\Users\\rafael\\Desktop\\Docs\\Lista_de_Vínculos_Alcançados1.xls");
//        File file = new File("C:\\Users\\rafael\\Desktop\\Docs\\Lista_de_vínculos_alcançados2.xls");
//        List<Trabalhador> trabalhadores = null;
//        try {
//            trabalhadores = Trabalhadores.getTrabalhadoresSimples(new FileInputStream(file2));
//        } catch (IOException ex) {
//            Logger.getLogger(Trabalhadores.class.getName()).log(Level.SEVERE, null, ex);
//        }
//
//        for (Trabalhador trabalhador : trabalhadores) {
//            System.out.println(trabalhador.toString());
//        }

        List<AtributoData> listaAtributoData = Trabalhadores.getListaAtributoAnos(new GregorianCalendar(2007, 9, 1).getTime(),
                new GregorianCalendar(2011, 9, 1).getTime());
        int i = 0;
        for (AtributoData atributoData : listaAtributoData) {

            System.out.println(i + "|" + atributoData.getData().toString());
            i++;
        }

    }

    public static List<AtributoData> getListaAtributoMeses(Date inicioPeriodo, Date fimPeriodo) {

        List<AtributoData> listaAtributoData = new LinkedList<AtributoData>();

        GregorianCalendar calendar = new GregorianCalendar();
        calendar.setTime(inicioPeriodo);
        while (calendar.getTime().before(fimPeriodo)) {
            listaAtributoData.add(new AtributoData(calendar.getTime()));
            calendar.add(Calendar.MONTH, 1);
        }
        listaAtributoData.add(new AtributoData(fimPeriodo));

        return listaAtributoData;
    }

    public static List<AtributoData> getListaAtributoAnos(Date inicioPeriodo, Date fimPeriodo) {

        List<AtributoData> listaAtributoData = new LinkedList<AtributoData>();

        GregorianCalendar calendar = new GregorianCalendar();
        calendar.setTime(inicioPeriodo);

        GregorianCalendar calendar2 = new GregorianCalendar();
        calendar2.setTime(fimPeriodo);
        while (calendar.get(Calendar.YEAR) <= calendar2.get(Calendar.YEAR)) {
            System.out.println("I:" + calendar.get(Calendar.YEAR) + ";F:" + calendar2.get(Calendar.YEAR));
            listaAtributoData.add(new AtributoData(calendar.getTime()));
            calendar.add(Calendar.YEAR, 1);
        }

        return listaAtributoData;
    }
}
